
/*
*Released on 28th June 2008.
*Any violations can be reported at paritosh@wikiocean.net
*What is treated as violations can be found at www.wikiocean.net/ppl1-voilations*
******************************************************************************
* The contents of this file are subject to POOL Public License 1.0 and later.
* POOL Public License is based on Affero GPL v3 and additional conditions.
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the Affero GPL v3 License at http://www.gnu.org/licenses/agpl.html
* You may obtain a copy of the POOL Public License 1.0 or later at www.wikiocean.net/license/ppl.html
* Software distributed under POOL Public License 1.0 is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Initial Developer of the Original Code is Paritosh Pungaliya (C) 2008. All Rights Reserved.
******************************************************************************
* Objective of the additional terms (license)
* 1) Is to extend the software freedom to freedom to work.
* 2) To ensure that knowledge is free from monopoly of agencies.
* 3) To avoid a situation where big corporate or investor can buy out free software groups and companies and then start milking the communities built around it.
* (this trend can be seen how the freedom is curtailed in companies that get Venture Capital funding.)
******************************************************************************
*/

package  basicprocess.inheritance;

import java.util.Hashtable;
import java.util.LinkedList;
import java.util.Vector;

import dbmanager.DBManager;
import dbmanager.GetIdName;

import utility.CapitalChar;
import utility.ConvertToLower;

public class Scope 
{
	DBManager database;
	GetIdName gid;
	String SCOPE="scope";
	String INHERITANCE="inheritance";
	public void InitPool()
	{	
		gid = new GetIdName(); 
		SCOPE = gid.getId(SCOPE); 
		INHERITANCE = gid.getId(INHERITANCE);
	}
	
	public Vector<Object> checkforscope(Vector<Object> vector,String ParentObject) 
	{
		LinkedList<Object> linkedlist = new LinkedList<Object>();
		for(int i=0;i<vector.size();i++)
		{
			Hashtable<Object, Object>table =(Hashtable<Object, Object>) vector.get(i);
			table = ConvertToLower.convertHashKey(table);
			//String splitvector[] = vector.get(i).toString().split("\t");
			
		
			if(table.get("pid").equals(SCOPE))
			{
				String scopvalue = table.get("pv").toString();
				if(!linkedlist.contains(scopvalue))
					linkedlist.add(scopvalue);
			}
		}
		for(int i=0;i<linkedlist.size();i++)
		{	 
			 try 
			 {
				 scope.Scope scope;
				 Class C = Class.forName("scope."+CapitalChar.makeFirstCharCapital(gid.getItem(linkedlist.get(i).toString())));
				 scope  =(scope.Scope)C.newInstance();
				 
				 scope.initPool();
				 scope.setVector(vector);
				 scope.getParent(ParentObject);
				 scope.processScope();
				 vector = scope.getVector();
			 }
			 catch (ClassNotFoundException e) 
			 {
				e.printStackTrace();
			 }
			 catch (InstantiationException e) 
			 {
				e.printStackTrace();
			 }
			 catch (IllegalAccessException e) 
			 {
				e.printStackTrace();
			 }
		}
		for(int i=0;i<vector.size();i++)
		{
			Hashtable<Object, Object>  table = new Hashtable<Object, Object>();
			table =(Hashtable<Object, Object>) vector.get(i);
			if(table.get("pid").equals(INHERITANCE))
				vector.remove(i);
		}
		return vector;
	}
}
